Adapt to Edge 510's mutation of Garmin Fit to deal with sample provided by
authorrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 22 Mar 2015 01:34:38 +0000 (01:34 +0000)
committerrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 22 Mar 2015 01:34:38 +0000 (01:34 +0000)
James Morris.

gpsbabel/garmin_fit.cc

index 82fe6b756c0eb4483e1989a0e27b6ed6af5cc7d6..f5f95b59834e8d9006deade6989e30d5e3365052 100644 (file)
@@ -250,18 +250,28 @@ fit_read_field(fit_field_t* f)
   switch (f->type) {
   case 1: // sint8
   case 2: // uint8
-    is_fatal(f->size != 1,
-             MYNAME ": Bad field size in data message\n");
+  if (f->size == 4) {
+    return fit_getuint32();
+  } else if (f->size == 2) {
+    return fit_getuint16();
+  } else if (f->size == 1) {
     return fit_getuint8();
+  } else {
+    fatal(MYNAME ": Bad field size %d in 1-byte data message\n", f->size);
+  }
   case 0x83: // sint16
   case 0x84: // uint16
-    is_fatal(f->size != 2,
-             MYNAME ": Bad field size in data message\n");
+  if (f->size == 4) {
+    return fit_getuint32();
+  } else if (f->size == 2) {
     return fit_getuint16();
+  } else {
+    fatal(MYNAME ": Bad field size %d in 2-byte data message\n", f->size);
+  }
   case 0x85: // sint32
   case 0x86: // uint32
     is_fatal(f->size != 4,
-             MYNAME ": Bad field size in data message\n");
+             MYNAME ": Bad field size %d in 4-byte data message\n", f->size);
     return fit_getuint32();
   default: // Ignore everything else for now.
     for (i = 0; i < f->size; i++) {